#!/bin/sh
set -e

locally_changed_files () {
  # New files
  git status --porcelain | grep -Ee '^\?' | cut -c4-
  # Changes/deleted files
  git diff --name-only --relative
}

main () {
  # Ensure we have a clean working tree
  git is-clean -wiv

  ORIG_SHA="$(git sha HEAD)"
  echo "Original commit is: $ORIG_SHA"

  LAST_COMMIT_MSG="$(git log --pretty='%s' -1)"
  git delouse

  locally_changed_files | while read f; do
    git add "$f"
    git commit --no-verify -C "$ORIG_SHA"
    git commit --amend --no-verify -m "$LAST_COMMIT_MSG @ $f"
  done

  # Sanity check
  if ! git diff --exit-code "$ORIG_SHA" "$(git sha HEAD)"; then
    echo "Warning! There were differences found between the current state and the" >&2
    echo "original commit.  You may want to revert back to the original commit:" >&2
    echo "" >&2
    echo "    git reset --hard $ORIG_SHA" >&2
    echo "" >&2
  else
    echo "Success! Original commit was: $ORIG_SHA"
  fi
}

( cd "$(git root)" && main "$@" )
